package com.yjzx.util.common.util;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 生成序列号
 *
 * <p>应互联互通的要求,每次请求需要带上流水号,从0001开始,新的一秒重新计算
 *
 * @author jiangliang
 * @since 2020/3/18 13:14
 **/
public final class SeqUtil {

    /**
     * 设置一个开始流水号
     */
    private static AtomicInteger seqNum = new AtomicInteger(1);

    private static String timeStamp = null;

    /**
     * @return 对应seq
     */
    public static synchronized String getSeq() {
        //如果没有时间戳
        String num = "0001";
        int a = seqNum.getAndIncrement();
        String nowTimeStamp = TimeUtils.getTimeStamp();
        if (null == timeStamp || !timeStamp.equals(nowTimeStamp)) {
            timeStamp = nowTimeStamp;
            seqNum.set(1);
        } else {
            num = appendNumber(a);
        }
        return num;
    }

    /**
     * 不考虑大于4位数的，不可能出现
     *
     * @param num 数字
     * @return 字符串
     */
    private static String appendNumber(int num) {
        return String.format("%04d", num);
    }

}
